<?php
/*
 * Copyright (c) 2013 Eugene Kuzmenko
 *
 * Permission  is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in  the Software without restriction, including without limitation the rights
 * to  use,  copy,  modify,  merge, publish, distribute, sublicense, and/or sell
 * copies  of  the  Software,  and  to  permit  persons  to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The  above  copyright  notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE  SOFTWARE  IS  PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED,  INCLUDING  BUT  NOT  LIMITED  TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS  FOR  A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS  OR  COPYRIGHT  HOLDERS  BE  LIABLE  FOR  ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 * 
 * For more information, see <http://www.aljey.com>.
 */

namespace Al\Smarty\Lib;

use Al\Core\Lib\Service,
    Al\Template\Lib\AbstractTemplateEngine;

/**
 * Renders smarty templates.
 *
 * @author Eugene Kuzmenko <mail@aljey.com>
 */
class SmartyTemplateEngine extends AbstractTemplateEngine {

  /**
   * @var \Smarty A smarty parser instance.
   */
  private $smarty;

  /**
   * Initializes the engine.
   */
  public function __construct() {
    require_once __DIR__ . '/../Vendor/Smarty/Smarty.class.php';
    $this->smarty = $smarty = new \Smarty;
    Service::get('event')->on('autoload.fallback', function ($class)
      use (&$smarty) {
        try {
          $smarty->loadPlugin($class);
          return true;
        } catch (\Exception $exc) {}
      });
    $smarty->addPluginsDir(__DIR__ . '/../Resources/plugins/')
      ->setCompileDir(__DIR__ . '/../Resources/cache/')
      ->autoload_filters = array('post' => array('strip'))
    ;
  }

  /**
   * {@inheritDoc}
   */
  public function render($template, $params = array()) {
    $this->smarty->clearAllAssign();
    $this->smarty->assign($params);
    $this->result = $this->smarty->fetch($template);
  }

}